package org.glut.wechat.chat.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

/**
 * Redis配置类：解决RedisTemplate Bean缺失 + 配置JSON序列化（避免乱码）
 */
@Configuration
public class RedisConfig {

    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        // 1. 创建RedisTemplate实例
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        // 2. 关联Redis连接工厂（Spring自动注入的连接工厂，基于application.yml配置）
        redisTemplate.setConnectionFactory(redisConnectionFactory);

        // 3. 配置序列化方式（关键：避免存储的消息乱码，且支持JSON格式）
        // key序列化：用StringRedisSerializer（Redis key推荐用字符串）
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());

        // value序列化：用GenericJackson2JsonRedisSerializer（支持JSON对象，无需手动转JSON字符串）
        GenericJackson2JsonRedisSerializer jsonSerializer = new GenericJackson2JsonRedisSerializer();
        redisTemplate.setValueSerializer(jsonSerializer);
        redisTemplate.setHashValueSerializer(jsonSerializer);

        // 4. 初始化RedisTemplate（必须调用，否则配置不生效）
        redisTemplate.afterPropertiesSet();

        return redisTemplate;
    }
}

